'use strict'
Object.defineProperty(exports, '__esModule', { value: true })
var component_1 = require('../common/component')
component_1.VantComponent({
  field: true,
  relation: {
    name: 'dropdown-menu',
    type: 'ancestor',
    current: 'dropdown-item',
    linked: function() {
      this.updateDataFromParent()
    }
  },
  props: {
    value: {
      type: null,
      observer: 'rerender'
    },
    title: {
      type: String,
      observer: 'rerender'
    },
    disabled: Boolean,
    titleClass: {
      type: String,
      observer: 'rerender'
    },
    options: {
      type: Array,
      value: [],
      observer: 'rerender'
    },
    popupStyle: String
  },
  data: {
    transition: true,
    showPopup: false,
    showWrapper: false,
    displayTitle: ''
  },
  methods: {
    rerender: function() {
      var _this = this
      wx.nextTick(function() {
        _this.parent && _this.parent.updateItemListData()
      })
    },
    updateDataFromParent: function() {
      if (this.parent) {
        var _a = this.parent.data
        var overlay = _a.overlay
        var duration = _a.duration
        var activeColor = _a.activeColor
        var closeOnClickOverlay = _a.closeOnClickOverlay
        var direction = _a.direction
        this.setData({
          overlay: overlay,
          duration: duration,
          activeColor: activeColor,
          closeOnClickOverlay: closeOnClickOverlay,
          direction: direction
        })
      }
    },
    onOpen: function() {
      this.$emit('open')
    },
    onOpened: function() {
      this.$emit('opened')
    },
    onClose: function() {
      this.$emit('close')
    },
    onClosed: function() {
      this.$emit('closed')
      this.setData({ showWrapper: false })
    },
    onOptionTap: function(event) {
      var option = event.currentTarget.dataset.option
      var value = option.value
      var shouldEmitChange = this.data.value !== value
      this.setData({ showPopup: false, value: value })
      this.$emit('close')
      this.rerender()
      if (shouldEmitChange) {
        this.$emit('change', value)
      }
    },
    toggle: function(show, options) {
      var _this = this
      if (options === void 0) {
        options = {}
      }
      var showPopup = this.data.showPopup
      if (typeof show !== 'boolean') {
        show = !showPopup
      }
      if (show === showPopup) {
        return
      }
      this.setData({
        transition: !options.immediate,
        showPopup: show
      })
      if (show) {
        this.parent.getChildWrapperStyle().then(function(wrapperStyle) {
          _this.setData({ wrapperStyle: wrapperStyle, showWrapper: true })
          _this.rerender()
        })
      } else {
        this.rerender()
      }
    }
  }
})
